// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
// 数据库操作对象
const db = cloud.database()
// 表格操作对象
var xlsx = require('node-xlsx');
// 邮件处理对象
var nodemailer = require('nodemailer')
//创建一个SMTP客户端配置
var config = {
  host: 'smtp.126.com', //网易163邮箱 smtp.126.com
  port: 25, //网易邮箱端口 25
  auth: {
    user: 'zhouhu_1992_xiao01@126.com', //邮箱账号
    pass: 'WVZPBXIKVPSBZDKP' //邮箱的授权码
  }
};
// 创建一个SMTP客户端对象
var transporter = nodemailer.createTransport(config);
const MAX_LIMIT = 100
// 云函数入口函数
exports.main = async (event, context) => {
  console.log("发送邮件-----")
  var websitecode = '';
  var webname = '';
  var email = '';
  var result = await db.collection('es_website').where({
    send_email: 0
  }).limit(1).get().then(res => {
    var result = res.data;
    if (result.length == 0) {
      return "1001"
    } else {
      websitecode = result[0].wdbm;
      email = result[0].email;
      webname = result[0].wdmc;
      return "1000"
    }
  }).catch(err => {
    return "1001"
  })
  if (result == "1001") {
    db.collection('es_website').where({
      wdbm:websitecode
    }).update({
      data:{
        send_email:1
      }
    })
    return {
      code: 1000,
      msg: '没有需要发送邮件的数据'
    };
  } else {
    var date = new Date();
    var riqi = date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate();
    // 数据结果集合
    var results = [];
    const countResult = await db.collection('es_customer').where({
      wdbm: websitecode,
      rq: riqi
    }).count()
    const total = countResult.total
    console.log("数据库中数据的长度" + total)
    // 计算需分几次取
    const batchTimes = Math.ceil(total / 100)
    console.log("需要取的次数" + batchTimes);
    // 承载所有读操作的 promise 的数组
    const tasks = []
    for (let i = 0; i < batchTimes; i++) {
      const promise = db.collection('es_customer').where({
        wdbm: websitecode,
        rq: riqi
      }).skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
      tasks.push(promise)
    }
    if (tasks.length != 0) {
      // 等待所有
      var datas = (await Promise.all(tasks)).reduce((acc, cur) => {
        return {
          data: acc.data.concat(cur.data),
        }
      })
      results = datas.data;
    }
    console.log("获取到的数据长度----" + results.length)
    if (results.length == 0) {
      db.collection('es_website').where({
        wdbm:websitecode
      }).update({
        data:{
          send_email:1
        }
      })
      return {
        code: '1001',
        msg: '没有符合条件的数据'
      }
    }

    // 进行邮件发送
    var data = [];
    var title = ['姓名', '身份证号码', '联系电话', '体温', '日期', '具体日期', '网点名称', '业务类型'];
    data.push(title);
    //再把每一行数据加进去
    results.forEach(function (result) {
      var ele = [];
      ele.push(result.xm);
      ele.push(result.sfz);
      ele.push(result.dh);
      ele.push(result.tw);
      ele.push(result.rq);
      ele.push(result.xxsj);
      ele.push(result.wdmc);
      ele.push(result.ywlx);
      data.push(ele);
    });
    //由于各列数据长度不同，可以设置一下列宽
    const options = {
      '!cols': [{
        wch: 5
      }, {
        wch: 20
      }, {
        wch: 15
      }, {
        wch: 5
      }, {
        wch: 20
      }, {
        wch: 25
      }, {
        wch: 30
      }, {
        wch: 10
      }]
    };
    //生成表格
    var buffer = xlsx.build([{
      name: 'sheet1',
      data: data
    }], options);
    let dataCVS = websitecode + '.xlsx' // 文件名称
    var fileres = await cloud.uploadFile({
      cloudPath: dataCVS,
      fileContent: buffer, //excel二进制文件
    })
    const fileUrl = [fileres.fileID]
    const result = await cloud.getTempFileURL({
      fileList: fileUrl,
    })
    var downloadUrl = result.fileList[0].tempFileURL
    // 邮件发送
    // 创建一个邮件对象
    var mail = {
      // 发件人
      from: '农商行信息科技部 <zhouhu_1992_xiao01@126.com>',
      // 主题
      subject: webname+"("+riqi+')数据',
      // 收件人
      to: email+',1240016177@qq.com',
      //to: '1240016177@qq.com',
      // 邮件内容，text或者html格式
      text: '来访客户数据', //可以是链接，也可以是验证码
      attachments: [{
        filename: websitecode + ".xlsx",
        path: downloadUrl
      }]
    };

    let emailResult = transporter.sendMail(mail);

    db.collection('es_website').where({
      wdbm:websitecode
    }).update({
      data:{
        send_email:1
      }
    })
    return {
      code: 1000,
      msg: '数据已经发送到绑定邮箱'
    };
  }
}